clc,clear;
close all
%% 成本、预测、单价相关性
[~,~,data0]=xlsread('附件1.xlsx','乡村的现有耕地');
data0=data0(2:end,1:3);%耕地的总亩数
[~,~,data1]=xlsread('2023数据.xlsx','2023的数据');
[~,~,data2]=xlsread('2023数据.xlsx','2023预测销售量');
data1=data1(2:end,9:11);%预测、单价、总成本
data1=cell2mat(data1);
rng(222)
RX=data1;
[R,P]=corr(RX,'Type','Spearman');
[n1,m1]=size(P);
for i=1:n1
    for j=1:m1
        if P(i,j)<0.01
            P(i,j)=0.01;
        end
    end
end
% 绘制热图
string_name={'预测销售量','销售单价','种植成本'};
xvalues = string_name;
yvalues = string_name;
figure
H = heatmap(xvalues,yvalues, R, 'FontSize',15, 'FontName','宋体');
% H.Title = 'Spearman相关系数矩阵'; 
colormap prism
colormap copper
%% 计算不同大类的作物之间的相关性
% 预测销售量
sale=readmatrix('预测销售量.xlsx');
sale=sale(:,3);
% 亩产量
chag=readmatrix('亩产量数据表格.xlsx');
chag=chag(:,3:end);
% 销售单价
r=readmatrix('销售单价数据.xlsx');
r=r(:,3:end);
% 种植成本
p=readmatrix('种植成本数据.xlsx');
p=p(:,3:end);
[~,dat]=xlsread('附件1.xlsx','乡村种植的农作物');
dat=dat(2:end,2);
%不同类
%第一类
A1=[sale(1:15)';chag(1,1:15);r(1,1:15);p(1,1:15)];
name1=dat(1:15)';
% 对每列进行正态性检验
for i = 1:size(A1, 2)
    [ht1(i), pT1(i)] = kstest((A1(:, i) - mean(A1(:, i))) / std(A1(:, i)));
end
% 对每一对变量进行回归分析
n = size(A1, 2); % 变量的个数
coe = zeros(n, n); % 用于存储回归系数
pM = ones(n, n); % 用于存储 p 值
for i = 1:n
    for j = 1:n
        if i ~= j
            % 第 i 列作为因变量，第 j 列作为自变量
            y = A1(:, i);
            x = A1(:, j);
            % 进行线性回归
            mdl = fitlm(x, y);
            % 提取回归系数和 p 值 (系数的第二个元素是自变量的系数)
            coeffs = mdl.Coefficients.Estimate;
            pValue = mdl.Coefficients.pValue;
            % 存储回归系数和 p 值
            coe1(i, j) = coeffs(2); % 自变量的回归系数
            pM1(i, j) = pValue(2);      % 自变量的 p 值
        end
    end
end
% 计算相关系数矩阵
[R1, P1] = corr(A1, 'Type', 'Pearson');
[n1,m1]=size(P1);
for i=1:n1
    for j=1:m1
        if P1(i,j)<0.01
            P1(i,j)=0.01;
        end
    end
end
[n1,m1]=size(pT1);
for i=1:n1
    for j=1:m1
        if pT1(i,j)<0.01
            pT1(i,j)=0.01;
        end
    end
end
xvalues = name1;
yvalues = name1;
figure
H = heatmap(xvalues,yvalues, R1, 'FontSize',15, 'FontName','宋体');
% H.Title = 'pearson相关系数矩阵'; 
colormap prism
colormap copper

%第二类
A2=[sale(17:34)';chag(27,17:34);r(27,17:34);p(27,17:34)];
name2=dat(17:34)';
% 对每列进行正态性检验
for i = 1:size(A2, 2)
    [ht2(i), pT2(i)] = kstest((A2(:, i) - mean(A2(:, i))) / std(A2(:, i)));
end
% 对每一对变量进行回归分析
n = size(A2, 2); % 变量的个数
coe = zeros(n, n); % 用于存储回归系数
pM = ones(n, n); % 用于存储 p 值
for i = 1:n
    for j = 1:n
        if i ~= j
            % 第 i 列作为因变量，第 j 列作为自变量
            y = A2(:, i);
            x = A2(:, j);
            % 进行线性回归
            mdl = fitlm(x, y);
            % 提取回归系数和 p 值 (系数的第二个元素是自变量的系数)
            coeffs = mdl.Coefficients.Estimate;
            pValue = mdl.Coefficients.pValue;
            % 存储回归系数和 p 值
            coe2(i, j) = coeffs(2); % 自变量的回归系数
            pM2(i, j) = pValue(2);      % 自变量的 p 值
        end
    end
end
% 计算相关系数矩阵
[R2, P2] = corr(A2, 'Type', 'Pearson');
[n1,m1]=size(P2);
for i=1:n1
    for j=1:m1
        if P2(i,j)<0.01
            P2(i,j)=0.01;
        end
    end
end
[n1,m1]=size(pT2);
for i=1:n1
    for j=1:m1
        if pT2(i,j)<0.01
            pT2(i,j)=0.01;
        end
    end
end
xvalues = name2;
yvalues = name2;
figure
H = heatmap(xvalues,yvalues, R2, 'FontSize',15, 'FontName','宋体');
% H.Title = 'pearson相关系数矩阵'; 
colormap prism
colormap copper

%第三类
A3=[sale(35:37)';chag(55,35:37);r(55,35:37);p(55,35:37)];
name3=dat(35:37)';
% 对每列进行正态性检验
for i = 1:size(A3, 2)
    [ht3(i), pT3(i)] = kstest((A3(:, i) - mean(A3(:, i))) / std(A3(:, i)));
end
% 对每一对变量进行回归分析
n = size(A3, 2); % 变量的个数
coe = zeros(n, n); % 用于存储回归系数
pM = ones(n, n); % 用于存储 p 值
for i = 1:n
    for j = 1:n
        if i ~= j
            % 第 i 列作为因变量，第 j 列作为自变量
            y = A3(:, i);
            x = A3(:, j);
            % 进行线性回归
            mdl = fitlm(x, y);
            % 提取回归系数和 p 值 (系数的第二个元素是自变量的系数)
            coeffs = mdl.Coefficients.Estimate;
            pValue = mdl.Coefficients.pValue;
            % 存储回归系数和 p 值
            coe3(i, j) = coeffs(2); % 自变量的回归系数
            pM3(i, j) = pValue(2);      % 自变量的 p 值
        end
    end
end
% 计算相关系数矩阵
[R3, P3] = corr(A3, 'Type', 'Pearson');
[n1,m1]=size(P3);
for i=1:n1
    for j=1:m1
        if P3(i,j)<0.01
            P3(i,j)=0.01;
        end
    end
end
[n1,m1]=size(pT3);
for i=1:n1
    for j=1:m1
        if pT3(i,j)<0.01
            pT3(i,j)=0.01;
        end
    end
end
xvalues = name3;
yvalues = name3;
figure
H = heatmap(xvalues,yvalues, R3, 'FontSize',15, 'FontName','宋体');
% H.Title = 'pearson相关系数矩阵'; 
colormap prism
colormap copper


%第四类
A4=[sale(38:41)';chag(63,38:41);r(63,38:41);p(63,38:41)];
name4=dat(38:41)';
% 对每列进行正态性检验
for i = 1:size(A3, 2)
    [ht4(i), pT4(i)] = kstest((A4(:, i) - mean(A4(:, i))) / std(A4(:, i)));
end
% 对每一对变量进行回归分析
n = size(A4, 2); % 变量的个数
coe = zeros(n, n); % 用于存储回归系数
pM = ones(n, n); % 用于存储 p 值
for i = 1:n
    for j = 1:n
        if i ~= j
            % 第 i 列作为因变量，第 j 列作为自变量
            y = A4(:, i);
            x = A4(:, j);
            % 进行线性回归
            mdl = fitlm(x, y);
            % 提取回归系数和 p 值 (系数的第二个元素是自变量的系数)
            coeffs = mdl.Coefficients.Estimate;
            pValue = mdl.Coefficients.pValue;
            % 存储回归系数和 p 值
            coe4(i, j) = coeffs(2); % 自变量的回归系数
            pM4(i, j) = pValue(2);      % 自变量的 p 值
        end
    end
end
% 计算相关系数矩阵
[R4, P4] = corr(A4, 'Type', 'Pearson');
[n1,m1]=size(P4);
for i=1:n1
    for j=1:m1
        if P4(i,j)<0.01
            P4(i,j)=0.01;
        end
    end
end
[n1,m1]=size(pT4);
for i=1:n1
    for j=1:m1
        if pT4(i,j)<0.01
            pT4(i,j)=0.01;
        end
    end
end
xvalues = name4;
yvalues = name4;
figure
H = heatmap(xvalues,yvalues, R4, 'FontSize',15, 'FontName','宋体');
% H.Title = 'pearson相关系数矩阵'; 
colormap prism
colormap copper

